
#ifndef Calendar_h
#define Calendar_h

#include <Defines.h>
#include <CSharpPropertyMethods.h>

#include <System/ICloneable.h>
#include <System/Array.h>
#include <System/Globalization/CalendarAlgorithmType.h>
#include <System/Globalization/CalendarWeekRule.h>
#include <System/DateTime.h>

namespace Riccsson
{
	namespace System
	{
		namespace Globalization
		{
			// Summary:
			//     Represents time in divisions, such as weeks, months, and years.
			/*abstract*/ class Calendar : public Riccsson::System::ICloneable
			{
				
				PROP3GET(Calendar, CalendarAlgorithmType, AlgorithmType)
				PROP3GET(Calendar, GC_PTR<Riccsson::System::Array<int>>, Eras)
				PROP3GET(Calendar, bool, IsReadOnly)
				PROP3GET(Calendar, DateTime, MaxSupportedDateTime)
				PROP3GET(Calendar, DateTime, MinSupportedDateTime)
				PROP3(Calendar, int, TwoDigitYearMax)

				// Summary:
				//     Represents the current era of the current calendar.
				public: static const int CurrentEra = 0;

				COPY_CONSTRUCTOR(Calendar)
				{
					PROP3GET_INIT_COPY(Calendar, CalendarAlgorithmType, AlgorithmType);
					PROP3GET_INIT_COPY(Calendar, GC_PTR<Riccsson::System::Array<int>>, Eras);
					PROP3GET_INIT_COPY(Calendar, bool, IsReadOnly);
					PROP3GET_INIT_COPY(Calendar, DateTime, MaxSupportedDateTime);
					PROP3GET_INIT_COPY(Calendar, DateTime, MinSupportedDateTime);
					PROP3_INIT_COPY(Calendar, int, TwoDigitYearMax);
				}

				// Summary:
				//     Initializes a new instance of the System.Globalization.Calendar class.
				protected: Calendar()
					: PROP3GET_INIT(Calendar, AlgorithmType)
					, PROP3GET_INIT(Calendar, Eras)
					, PROP3GET_INIT(Calendar, IsReadOnly)
					, PROP3GET_INIT(Calendar, MaxSupportedDateTime)
					, PROP3GET_INIT(Calendar, MinSupportedDateTime)
					, PROP3_INIT(Calendar, TwoDigitYearMax)
				{
					throw;
				}


				// Summary:
				//     Gets a value indicating whether the current calendar is solar-based, lunar-based,
				//     or a combination of both.
				//
				// Returns:
				//     One of the System.Globalization.CalendarAlgorithmType values.
				////[ComVisible(false)]
				public: virtual PROP3_GET(CalendarAlgorithmType, AlgorithmType)
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, gets the list of eras in the current
				//     calendar.
				//
				// Returns:
				//     An array of integers that represents the eras in the current calendar.
				public: abstract PROP3_GET(GC_PTR<Riccsson::System::Array<int>>, Eras) = 0;

				//
				// Summary:
				//     Gets a value indicating whether this System.Globalization.Calendar object
				//     is read-only.
				//
				// Returns:
				//     true if this System.Globalization.Calendar object is read-only; otherwise,
				//     false.
				//[ComVisible(false)]
				public: PROP3_GET(bool, IsReadOnly)
				{
					throw;
				}

				//
				// Summary:
				//     Gets the latest date and time supported by this System.Globalization.Calendar
				//     object.
				//
				// Returns:
				//     The latest date and time supported by this calendar. The default is System.DateTime.MaxValue.
				//[ComVisible(false)]
				public: virtual PROP3_GET(DateTime, MaxSupportedDateTime)
				{
					throw;
				}

				//
				// Summary:
				//     Gets the earliest date and time supported by this System.Globalization.Calendar
				//     object.
				//
				// Returns:
				//     The earliest date and time supported by this calendar. The default is System.DateTime.MinValue.
				//[ComVisible(false)]
				public: virtual PROP3_GET(DateTime, MinSupportedDateTime)
				{
					throw;
				}

				//
				// Summary:
				//     Gets or sets the last year of a 100-year range that can be represented by
				//     a 2-digit year.
				//
				// Returns:
				//     The last year of a 100-year range that can be represented by a 2-digit year.
				//
				// Exceptions:
				//   System.InvalidOperationException:
				//     The current System.Globalization.Calendar object is read-only.
				public: virtual PROP3_GET(int, TwoDigitYearMax)
				{
					throw;
				}

				public: virtual PROP3_SET(int, TwoDigitYearMax)
				{
					throw;
				}

				// Summary:
				//     Returns a System.DateTime that is the specified number of days away from
				//     the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to which to add days.
				//
				//   days:
				//     The number of days to add.
				//
				// Returns:
				//     The System.DateTime that results from adding the specified number of days
				//     to the specified System.DateTime.
				//
				// Exceptions:
				//   System.ArgumentException:
				//     The resulting System.DateTime is outside the supported range of this calendar.
				//
				//   System.ArgumentOutOfRangeException:
				//     days is outside the supported range of the System.DateTime return value.
				public: virtual DateTime AddDays(DateTime time, int days)
				{
					throw;
				}

				//
				// Summary:
				//     Returns a System.DateTime that is the specified number of hours away from
				//     the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to which to add hours.
				//
				//   hours:
				//     The number of hours to add.
				//
				// Returns:
				//     The System.DateTime that results from adding the specified number of hours
				//     to the specified System.DateTime.
				//
				// Exceptions:
				//   System.ArgumentException:
				//     The resulting System.DateTime is outside the supported range of this calendar.
				//
				//   System.ArgumentOutOfRangeException:
				//     hours is outside the supported range of the System.DateTime return value.
				public: virtual DateTime AddHours(DateTime time, int hours)
				{
					throw;
				}

				//
				// Summary:
				//     Returns a System.DateTime that is the specified number of milliseconds away
				//     from the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to add milliseconds to.
				//
				//   milliseconds:
				//     The number of milliseconds to add.
				//
				// Returns:
				//     The System.DateTime that results from adding the specified number of milliseconds
				//     to the specified System.DateTime.
				//
				// Exceptions:
				//   System.ArgumentException:
				//     The resulting System.DateTime is outside the supported range of this calendar.
				//
				//   System.ArgumentOutOfRangeException:
				//     milliseconds is outside the supported range of the System.DateTime return
				//     value.
				public: virtual DateTime AddMilliseconds(DateTime time, double milliseconds)
				{
					throw;
				}

				//
				// Summary:
				//     Returns a System.DateTime that is the specified number of minutes away from
				//     the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to which to add minutes.
				//
				//   minutes:
				//     The number of minutes to add.
				//
				// Returns:
				//     The System.DateTime that results from adding the specified number of minutes
				//     to the specified System.DateTime.
				//
				// Exceptions:
				//   System.ArgumentException:
				//     The resulting System.DateTime is outside the supported range of this calendar.
				//
				//   System.ArgumentOutOfRangeException:
				//     minutes is outside the supported range of the System.DateTime return value.
				public: virtual DateTime AddMinutes(DateTime time, int minutes)
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, returns a System.DateTime that is the
				//     specified number of months away from the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to which to add months.
				//
				//   months:
				//     The number of months to add.
				//
				// Returns:
				//     The System.DateTime that results from adding the specified number of months
				//     to the specified System.DateTime.
				//
				// Exceptions:
				//   System.ArgumentException:
				//     The resulting System.DateTime is outside the supported range of this calendar.
				//
				//   System.ArgumentOutOfRangeException:
				//     months is outside the supported range of the System.DateTime return value.
				public: abstract DateTime AddMonths(DateTime time, int months) = 0;

				//
				// Summary:
				//     Returns a System.DateTime that is the specified number of seconds away from
				//     the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to which to add seconds.
				//
				//   seconds:
				//     The number of seconds to add.
				//
				// Returns:
				//     The System.DateTime that results from adding the specified number of seconds
				//     to the specified System.DateTime.
				//
				// Exceptions:
				//   System.ArgumentException:
				//     The resulting System.DateTime is outside the supported range of this calendar.
				//
				//   System.ArgumentOutOfRangeException:
				//     seconds is outside the supported range of the System.DateTime return value.
				public: virtual DateTime AddSeconds(DateTime time, int seconds)
				{
					throw;
				}

				//
				// Summary:
				//     Returns a System.DateTime that is the specified number of weeks away from
				//     the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to which to add weeks.
				//
				//   weeks:
				//     The number of weeks to add.
				//
				// Returns:
				//     The System.DateTime that results from adding the specified number of weeks
				//     to the specified System.DateTime.
				//
				// Exceptions:
				//   System.ArgumentException:
				//     The resulting System.DateTime is outside the supported range of this calendar.
				//
				//   System.ArgumentOutOfRangeException:
				//     weeks is outside the supported range of the System.DateTime return value.
				public: virtual DateTime AddWeeks(DateTime time, int weeks)
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, returns a System.DateTime that is the
				//     specified number of years away from the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to which to add years.
				//
				//   years:
				//     The number of years to add.
				//
				// Returns:
				//     The System.DateTime that results from adding the specified number of years
				//     to the specified System.DateTime.
				//
				// Exceptions:
				//   System.ArgumentException:
				//     The resulting System.DateTime is outside the supported range of this calendar.
				//
				//   System.ArgumentOutOfRangeException:
				//     years is outside the supported range of the System.DateTime return value.
				public: abstract DateTime AddYears(DateTime time, int years) = 0;

				//
				// Summary:
				//     Creates a new object that is a copy of the current System.Globalization.Calendar
				//     object.
				//
				// Returns:
				//     A new instance of System.Object that is the memberwise clone of the current
				//     System.Globalization.Calendar object.
				//[ComVisible(false)]
				//[SecuritySafeCritical]
				public: virtual GC_PTR<object> Clone()
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, returns the day of the month in the specified
				//     System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to read.
				//
				// Returns:
				//     A positive integer that represents the day of the month in the time parameter.
				public: abstract int GetDayOfMonth(DateTime time) = 0;

				//
				// Summary:
				//     When overridden in a derived class, returns the day of the week in the specified
				//     System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to read.
				//
				// Returns:
				//     A System.DayOfWeek value that represents the day of the week in the time
				//     parameter.
				public: abstract DayOfWeek GetDayOfWeek(DateTime time) = 0;

				//
				// Summary:
				//     When overridden in a derived class, returns the day of the year in the specified
				//     System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to read.
				//
				// Returns:
				//     A positive integer that represents the day of the year in the time parameter.
				public: abstract int GetDayOfYear(DateTime time) = 0;

				//
				// Summary:
				//     Returns the number of days in the specified month and year of the current
				//     era.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				//   month:
				//     A positive integer that represents the month.
				//
				// Returns:
				//     The number of days in the specified month in the specified year in the current
				//     era.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.-or- month is outside
				//     the range supported by the calendar.
				public: virtual int GetDaysInMonth(int year, int month)
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, returns the number of days in the specified
				//     month, year, and era.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				//   month:
				//     A positive integer that represents the month.
				//
				//   era:
				//     An integer that represents the era.
				//
				// Returns:
				//     The number of days in the specified month in the specified year in the specified
				//     era.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.-or- month is outside
				//     the range supported by the calendar.-or- era is outside the range supported
				//     by the calendar.
				public: abstract int GetDaysInMonth(int year, int month, int era) = 0;

				//
				// Summary:
				//     Returns the number of days in the specified year of the current era.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				// Returns:
				//     The number of days in the specified year in the current era.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.
				public: virtual int GetDaysInYear(int year)
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, returns the number of days in the specified
				//     year and era.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				//   era:
				//     An integer that represents the era.
				//
				// Returns:
				//     The number of days in the specified year in the specified era.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.-or- era is outside the
				//     range supported by the calendar.
				public: abstract int GetDaysInYear(int year, int era) = 0;

				//
				// Summary:
				//     When overridden in a derived class, returns the era in the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to read.
				//
				// Returns:
				//     An integer that represents the era in time.
				public: abstract int GetEra(DateTime time) = 0;

				//
				// Summary:
				//     Returns the hours value in the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to read.
				//
				// Returns:
				//     An integer from 0 to 23 that represents the hour in time.
				public: virtual int GetHour(DateTime time)
				{
					throw;
				}

				//
				// Summary:
				//     Calculates the leap month for a specified year.
				//
				// Parameters:
				//   year:
				//     A year.
				//
				// Returns:
				//     A positive integer that indicates the leap month in the specified year.-or-Zero
				//     if this calendar does not support a leap month or if the year parameter does
				//     not represent a leap year.
				//[ComVisible(false)]
				public: virtual int GetLeapMonth(int year)
				{
					throw;
				}

				//
				// Summary:
				//     Calculates the leap month for a specified year and era.
				//
				// Parameters:
				//   year:
				//     A year.
				//
				//   era:
				//     An era.
				//
				// Returns:
				//     A positive integer that indicates the leap month in the specified year and
				//     era.-or-Zero if this calendar does not support a leap month or if the year
				//     and era parameters do not specify a leap year.
				//[ComVisible(false)]
				public: virtual int GetLeapMonth(int year, int era)
				{
					throw;
				}

				//
				// Summary:
				//     Returns the milliseconds value in the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to read.
				//
				// Returns:
				//     A double-precision floating-point number from 0 to 999 that represents the
				//     milliseconds in the time parameter.
				public: virtual double GetMilliseconds(DateTime time)
				{
					throw;
				}

				//
				// Summary:
				//     Returns the minutes value in the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to read.
				//
				// Returns:
				//     An integer from 0 to 59 that represents the minutes in time.
				public: virtual int GetMinute(DateTime time)
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, returns the month in the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to read.
				//
				// Returns:
				//     A positive integer that represents the month in time.
				public: abstract int GetMonth(DateTime time) = 0;

				//
				// Summary:
				//     Returns the number of months in the specified year in the current era.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				// Returns:
				//     The number of months in the specified year in the current era.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.
				public: virtual int GetMonthsInYear(int year)
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, returns the number of months in the specified
				//     year in the specified era.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				//   era:
				//     An integer that represents the era.
				//
				// Returns:
				//     The number of months in the specified year in the specified era.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.-or- era is outside the
				//     range supported by the calendar.
				public: abstract int GetMonthsInYear(int year, int era) = 0;

				//
				// Summary:
				//     Returns the seconds value in the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to read.
				//
				// Returns:
				//     An integer from 0 to 59 that represents the seconds in time.
				public: virtual int GetSecond(DateTime time)
				{
					throw;
				}

				//
				// Summary:
				//     Returns the week of the year that includes the date in the specified System.DateTime
				//     value.
				//
				// Parameters:
				//   time:
				//     A date and time value.
				//
				//   rule:
				//     An enumeration value that defines a calendar week.
				//
				//   firstDayOfWeek:
				//     An enumeration value that represents the first day of the week.
				//
				// Returns:
				//     A positive integer that represents the week of the year that includes the
				//     date in the time parameter.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     time is earlier than System.Globalization.Calendar.MinSupportedDateTime or
				//     later than System.Globalization.Calendar.MaxSupportedDateTime.-or-firstDayOfWeek
				//     is not a valid System.DayOfWeek value.-or- rule is not a valid System.Globalization.CalendarWeekRule
				//     value.
				public: virtual int GetWeekOfYear(DateTime time, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, returns the year in the specified System.DateTime.
				//
				// Parameters:
				//   time:
				//     The System.DateTime to read.
				//
				// Returns:
				//     An integer that represents the year in time.
				public: abstract int GetYear(DateTime time) = 0;

				//
				// Summary:
				//     Determines whether the specified date in the current era is a leap day.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				//   month:
				//     A positive integer that represents the month.
				//
				//   day:
				//     A positive integer that represents the day.
				//
				// Returns:
				//     true if the specified day is a leap day; otherwise, false.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.-or- month is outside
				//     the range supported by the calendar.-or- day is outside the range supported
				//     by the calendar.
				public: virtual bool IsLeapDay(int year, int month, int day)
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, determines whether the specified date
				//     in the specified era is a leap day.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				//   month:
				//     A positive integer that represents the month.
				//
				//   day:
				//     A positive integer that represents the day.
				//
				//   era:
				//     An integer that represents the era.
				//
				// Returns:
				//     true if the specified day is a leap day; otherwise, false.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.-or- month is outside
				//     the range supported by the calendar.-or- day is outside the range supported
				//     by the calendar.-or- era is outside the range supported by the calendar.
				public: abstract bool IsLeapDay(int year, int month, int day, int era) = 0;

				//
				// Summary:
				//     Determines whether the specified month in the specified year in the current
				//     era is a leap month.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				//   month:
				//     A positive integer that represents the month.
				//
				// Returns:
				//     true if the specified month is a leap month; otherwise, false.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.-or- month is outside
				//     the range supported by the calendar.
				public: virtual bool IsLeapMonth(int year, int month)
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, determines whether the specified month
				//     in the specified year in the specified era is a leap month.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				//   month:
				//     A positive integer that represents the month.
				//
				//   era:
				//     An integer that represents the era.
				//
				// Returns:
				//     true if the specified month is a leap month; otherwise, false.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.-or- month is outside
				//     the range supported by the calendar.-or- era is outside the range supported
				//     by the calendar.
				public: abstract bool IsLeapMonth(int year, int month, int era) = 0;

				//
				// Summary:
				//     Determines whether the specified year in the current era is a leap year.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				// Returns:
				//     true if the specified year is a leap year; otherwise, false.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.
				public: virtual bool IsLeapYear(int year)
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, determines whether the specified year
				//     in the specified era is a leap year.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				//   era:
				//     An integer that represents the era.
				//
				// Returns:
				//     true if the specified year is a leap year; otherwise, false.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.-or- era is outside the
				//     range supported by the calendar.
				public: abstract bool IsLeapYear(int year, int era) = 0;

				//
				// Summary:
				//     Returns a read-only version of the specified System.Globalization.Calendar
				//     object.
				//
				// Parameters:
				//   calendar:
				//     A System.Globalization.Calendar object.
				//
				// Returns:
				//     The System.Globalization.Calendar object specified by the calendar parameter,
				//     if calendar is read-only.-or-A read-only memberwise clone of the System.Globalization.Calendar
				//     object specified by calendar, if calendar is not read-only.
				//
				// Exceptions:
				//   System.ArgumentNullException:
				//     calendar is null.
				//[ComVisible(false)]
				//[SecuritySafeCritical]
				public: static GC_PTR<Calendar> ReadOnly(Calendar* calendar)
				{
					throw;
				}

				//
				// Summary:
				//     Returns a System.DateTime that is set to the specified date and time in the
				//     current era.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				//   month:
				//     A positive integer that represents the month.
				//
				//   day:
				//     A positive integer that represents the day.
				//
				//   hour:
				//     An integer from 0 to 23 that represents the hour.
				//
				//   minute:
				//     An integer from 0 to 59 that represents the minute.
				//
				//   second:
				//     An integer from 0 to 59 that represents the second.
				//
				//   millisecond:
				//     An integer from 0 to 999 that represents the millisecond.
				//
				// Returns:
				//     The System.DateTime that is set to the specified date and time in the current
				//     era.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.-or- month is outside
				//     the range supported by the calendar.-or- day is outside the range supported
				//     by the calendar.-or- hour is less than zero or greater than 23.-or- minute
				//     is less than zero or greater than 59.-or- second is less than zero or greater
				//     than 59.-or- millisecond is less than zero or greater than 999.
				public: virtual DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond)
				{
					throw;
				}

				//
				// Summary:
				//     When overridden in a derived class, returns a System.DateTime that is set
				//     to the specified date and time in the specified era.
				//
				// Parameters:
				//   year:
				//     An integer that represents the year.
				//
				//   month:
				//     A positive integer that represents the month.
				//
				//   day:
				//     A positive integer that represents the day.
				//
				//   hour:
				//     An integer from 0 to 23 that represents the hour.
				//
				//   minute:
				//     An integer from 0 to 59 that represents the minute.
				//
				//   second:
				//     An integer from 0 to 59 that represents the second.
				//
				//   millisecond:
				//     An integer from 0 to 999 that represents the millisecond.
				//
				//   era:
				//     An integer that represents the era.
				//
				// Returns:
				//     The System.DateTime that is set to the specified date and time in the current
				//     era.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.-or- month is outside
				//     the range supported by the calendar.-or- day is outside the range supported
				//     by the calendar.-or- hour is less than zero or greater than 23.-or- minute
				//     is less than zero or greater than 59.-or- second is less than zero or greater
				//     than 59.-or- millisecond is less than zero or greater than 999.-or- era is
				//     outside the range supported by the calendar.
				public: abstract DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era) = 0;

				//
				// Summary:
				//     Converts the specified year to a four-digit year by using the System.Globalization.Calendar.TwoDigitYearMax
				//     property to determine the appropriate century.
				//
				// Parameters:
				//   year:
				//     A two-digit or four-digit integer that represents the year to convert.
				//
				// Returns:
				//     An integer that contains the four-digit representation of year.
				//
				// Exceptions:
				//   System.ArgumentOutOfRangeException:
				//     year is outside the range supported by the calendar.
				public: virtual int ToFourDigitYear(int year)
				{
					throw;
				}

			};
		}
	}
}

#endif